package com.xuecheng.learning.service.impl;

import com.alibaba.fastjson.JSON;
import com.xuecheng.base.model.RestResponse;
import com.xuecheng.content.model.dto.TeachplanDto;
import com.xuecheng.content.model.po.CoursePublish;
import com.xuecheng.content.model.po.Teachplan;
import com.xuecheng.learning.feignclient.ContentServiceClient;
import com.xuecheng.learning.feignclient.MediaServiceClient;
import com.xuecheng.learning.model.dto.XcCourseTablesDto;
import com.xuecheng.learning.service.LearningService;
import com.xuecheng.learning.service.MyCourseTablesService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author 顾梦
 * @description 在线学习接口
 * @since 2023/7/22
 */
@Service
public class LearningServiceImpl implements LearningService {

    @Resource
    MyCourseTablesService myCourseTablesService;

    @Resource
    ContentServiceClient contentServiceClient;

    @Resource
    MediaServiceClient mediaServiceClient;

    @Override
    public RestResponse<String> getVideo(String userId, Long courseId, Long teachplanId, String mediaId) {

        // 查询课程信息
        CoursePublish coursepublish = contentServiceClient.getCoursepublish(courseId);
        // 判断如果为null不再继续
        if (coursepublish == null) {
            return RestResponse.validfail("课程不存在");
        }

        // 远程调用内容管理服务根据课程计id(teachplanId)去查询课程计划信息，如果is_preview的值为1表示支持试学
        // TODO: 如果支持试学调用媒资服务查询视颇的播放地址，返回


        // 用户已登录
        if (StringUtils.isNotEmpty(userId)) {
            // 获取学习资格
            XcCourseTablesDto learningStatus = myCourseTablesService.getLearningStatus(userId, courseId);
            String learnStatus = learningStatus.getLearnStatus();
            if ("702002".equals(learnStatus)) {
                return RestResponse.validfail("无法学习，因为没有选课或选课后没有支付");
            } else if ("702003".equals(learnStatus)) {
                return RestResponse.validfail("已过期需要申请续期或重新支付");
            }
            // 有资格学习，要返回视频的播放地址
            // 远程调用媒资获取视频播放地址
            return mediaServiceClient.getPlayUrlByMediaId(mediaId);

        }
        // 如果用户没有登录
        // 取出课程的收费规则
        String charge = coursepublish.getCharge();
        if ("201000".equals(charge)) {
            // 有资格学习，要返回视频的播放地址
            // 远程调用媒资获取视频播放地址
            return mediaServiceClient.getPlayUrlByMediaId(mediaId);
        }

        return RestResponse.validfail("该课程没有选课 ");
    }
}
